﻿#pragma once

#include "Basic.h"
#include "Coordinate.h"
#include "Calculus.h"
#include "Geodesy.h"
#include "LookupTable.h"
#include "Matrix.h"
#include "Polynomial.h"
#include "TransferFunction.h"
#include "Vector.h"

namespace ASL
{

// 机型宏定义
#define AIRCRAFT_F16 1
#define AIRCRAFT_F22 2
#define AIRCRAFT_A320 3
#define AIRCRAFT_B737 4
#define AIRCRAFT_X24 5
#define AIRCRAFT_C130 6

// 区间标识定义
#define AXIS_MIN 0
#define AXIS_MAX 1

// 单位制常量
#define FT_TO_M 0.3048
#define IN_TO_M 0.0254
#define LBS_TO_KG 0.4536
#define LBF_TO_N 4.4482
#define FT2_TO_M2 0.0929
#define SLUGFT2_TO_KGM2 1.3558
#define SLUGFT3_TO_KGM3 515.3787
#define FPS_TO_MS 0.3048
#define KTS_TO_MS 0.5144
#define BAR_TO_PA 100000.0
#define PSF_TO_PA 47.8803

    // 数学运算类
    class ASL_API MathOperation
    {
    public:
        // 相对位置坐标函数
        // 输入 location 安装位置 m 结构系 [X, Y, Z]
        // 输入 CG 重心位置 m 结构系 [X, Y, Z]
        // 返回 return 相对位置 m 机体系 [X, Y, Z]
        static ASL::Vector relativePosition(ASL::Vector &location, ASL::Vector &CG);

        // 归一化函数
        // 输入 x 实际数值
        // 参数 negativeValue 负数值
        // 参数 positiveValue 正数值
        // 返回 return 归一化数值
        static double normalize(double x, double negativeValue, int positiveValue);

        // 反归一化函数
        // 输入 x 归一化数值
        // 参数 negativeValue 负数值
        // 参数 positiveValue 正数值
        // 返回 return 实际数值
        static double scale(double x, double negativeValue, int positiveValue);

        // 密度高度函数
        // 输入 altitude 海拔高度 m
        // 返回 return 密度高度 m
        static double densityAltitude(double altitude);

        // 校正空速函数
        // 输入 mach 马赫数 -
        // 输入 altitude 海拔高度 m
        // 返回 return 校正空速 m/s
        static double vcalibratedAirSpeed(double mach, double altitude);
    };

}
